package cn.com.cnxfs.singlenetpassword;

import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

/*
写一个内容观察者的类，用于监视手机数据库中uri的变化
        原理：
        当没有特定uri数据引起手机数据库变化时程序不执行操作，如果接受到新的短信，
        uri会引起数据库，当监视到数据库的变化时对短信内容
        进行操作，进而实现获取到最新短信验证码的功能*/
public class MyContent extends ContentObserver {
    private final Context mcontext;
    private final Handler mhandler;
    /*
    重写一个构造方法，因为当数据库变化时要通知程序进行下一步操作，
    所以需要传入Handler对象*/
    public MyContent(Context context, Handler handler) {
        super(handler);
        mcontext = context;
        mhandler = handler;
    }

    /*
    重写内容观察者类的onChange方法，当数据库uri变化时读取短信内容，
    并通过Handler将短信内容传递给界面进行显示*/
    @Override
    public void onChange(boolean selfChange, Uri uri) {
        super.onChange(selfChange, uri);
        if (!uri.toString().equals("content://sms/raw")) {
            final Cursor cursor = mcontext.getContentResolver().query(Uri.parse("content://sms/inbox"), null,
                    "address='106593005'", null, null);
            Log.d("选后共几行", cursor.getCount()+"");
            if (cursor.moveToFirst()) {  //读取短信内容
                Log.d("电话号码", cursor.getString(cursor.getColumnIndex("address")));
                String body = cursor.getString(cursor.getColumnIndex("body"));
                Log.d("内容", body);
                Message message = mhandler.obtainMessage(1, body);
                mhandler.sendMessage(message);
            }
            cursor.close();
        }
    }
}